Rundeck: AWS CLIによるEC2サーバ起動&停止ジョブの作成
小ネタです。
ジョブ管理ツールである『Rundeck』で、EC2サーバの起動・停止を行なう為のジョブ作成についてその手順をまとめておこうと思います。
Rundeck導入先のEC2サーバにて実行環境を準備
とは言っても、特に難しい事をする訳ではありません。RundeckをインストールしているEC2サーバ上でAWS CLIを使える状態にしておき、Rundeck上でAWS CLIコマンドを実行するだけです。
インスタンス起動後、サーバにログインしてaws configureコマンドで必要なクレデンシャル情報を手動入力しておくでも良いですし、
# 動作検証用に別途jqを入れました $ sudo yum -y install jq # 設定前の状態:権限無しで実行出来ず $ aws ec2 describe-instances --region us-east-1 | jq '.Reservations[].Instances[].InstanceId' Unable to locate credentials. You can configure credentials by running "aws configure". # aws configureによるクレデンシャル情報の設定 $ aws configure AWS Access Key ID [None]: (所定のACCESS_KEY_IDを入力) AWS Secret Access Key [None]: (所定のSECRET_ACCESS_KEYを入力) Default region name [None]: us-east-1 Default output format [None]: # 再実行 $ aws ec2 describe-instances --region us-east-1 | jq '.Reservations[].Instances[].InstanceId' "i-c3xxxxxx" "i-62xxxxxx" "i-32xxxxxx" "i-22xxxxxx" "i-edxxxxxx" "i-24xxxxxx" "i-a4xxxxxx" "i-91xxxxxx"
EC2インスタンスにIAM Roleを割り当てておき、そのIAM RoleにEC2起動・停止を実行する為の権限を付与させてAWS CLIでその情報を使って実行させる、でも良いかと思います。下記キャプチャではIAM RoleにPowerUserAccessのポリシーを割りてています。
- Amazon EC2 インスタンスで実行されるアプリケーションに IAM ロールを使用してアクセス権限を付与する - AWS Identity and Access Management
- Amazon EC2 の IAM ロール - Amazon Elastic Compute Cloud
(ちなみにIAM Roleの権限が無い場合は以下の様なエラーメッセージとなります/Rundeck実行ログより抜粋)
A client error (UnauthorizedOperation) occurred when calling the StartInstances operation: You are not authorized to perform this operation. Encoded authorization failure message: FiO(中略)PlSg Result: 255 Failed: NonZeroResultCode: Result code was 255 Execution failed: 6: [ Workflow result: , step failures: {1=Dispatch failed on 1 nodes: [localhost: NonZeroResultCode: Result code was 255]}, Node failures: {localhost=[NonZeroResultCode: Result code was 255]}, flow control: Continue, status: failed]
Rundeck: Jobの作成と実行確認
では実際にジョブを作成してみましょう。プロジェクト作成後に新規ジョブ作成を行い、ジョブ名及び説明文に情報の設定を行います。
コマンドは所定のインスタンスIDを指定したEC2起動のコマンドを設定。(下記画面ではリージョンのオプション指定を行っていますが、こちらはIAM Roleによる権限付与を行っていた(=aws configureによるリージョン指定を行っていない)為、実行時にオプション指定しています)
[save]ボタンを押下しステップとして保存しておき、ジョブを作成します。
ジョブ作成完了。まずは動くかどうかの確認です。[Run Job Now]で即時実行してみます。
実行完了。ログを確認してみると、ちゃんと実行出来ていますね。
あとはジョブの編集で、所定のサイクルでジョブが実行される様に設定しておけばOKです。
さいごに
以上、Rundeck経由でEC2サーバの起動・停止を行なう設定に関するご紹介でした。そこまで手順を煩わせる事無く実現が可能となっていますので、興味のある方は是非試してみてはいかがでしょうか?こちらからは以上です。